/*
 * @Author: zhouwei wei.zhou@flip.fun
 * @Date: 2024-04-07 22:17:01
 * @LastEditors: zhouwei wei.zhou@flip.fun
 * @LastEditTime: 2024-04-07 22:50:37
 * @FilePath: /50/手撕系列/promise_all.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 *
 * @param {  Promise<any>[] } args
 * @returns
 */
function all(args) {
	return new Promise((resolve, reject) => {
		const result = []
		let resolveCount = 0;
        /**
         *  注意点
         *  1. 按顺序返回
         *  2. 如果数组里面不是promise , 则需要包装成promise
         *  3. 如果其中有一个错误的promise,则直接返回错误的  (原生的是会返回一个包装过的错误原因的promise对象)
         */
		for (let index = 0; index < args.length; index++) {
			const promiseItem = array[index]
			Promise.resolve(promiseItem)
				.then(res => {
                    resolveCount++
					result[index] = res
                    if (resolveCount === 3) {
                        resolve(result)
                    }
				})
				.catch(err => {
					result[index] = res
                    reject(err)
				})
		}
	})
}
